package com.hangwei.paperless.net;


import com.hangwei.paperless.model.bean.AcceptCheckInfo;
import com.hangwei.paperless.model.bean.BasicInfoBean;
import com.hangwei.paperless.model.bean.CardToSeal;
import com.hangwei.paperless.model.bean.DRSInfo;
import com.hangwei.paperless.model.bean.DataFilling;
import com.hangwei.paperless.model.bean.DictBean;
import com.hangwei.paperless.model.bean.Disposition;
import com.hangwei.paperless.model.bean.EngTreatmentInfo;
import com.hangwei.paperless.model.bean.Login;
import com.hangwei.paperless.model.bean.LotDataSheet;
import com.hangwei.paperless.model.bean.MainRepairList;
import com.hangwei.paperless.model.bean.PNBean;
import com.hangwei.paperless.model.bean.PartCheckInfo;
import com.hangwei.paperless.model.bean.PartsRoutingSheet;
import com.hangwei.paperless.model.bean.PicResult;
import com.hangwei.paperless.model.bean.ProcessSheet;
import com.hangwei.paperless.model.bean.QRBean;
import com.hangwei.paperless.model.bean.RecordListBean;
import com.hangwei.paperless.model.bean.ResultBean;
import com.hangwei.paperless.model.bean.ServerVersion;
import com.hangwei.paperless.model.bean.Sheet;
import com.hangwei.paperless.model.bean.SheetType;
import com.hangwei.paperless.model.bean.SubPartCheckSealBean;
import com.hangwei.paperless.model.bean.SubProcessInfo;
import com.hangwei.paperless.model.bean.SubProcessListAll;
import com.hangwei.paperless.model.bean.SubRepairList;
import com.hangwei.paperless.model.bean.SubSetInfo;
import com.hangwei.paperless.model.bean.SubSetListSealBean;
import com.hangwei.paperless.model.bean.TokenInfo;
import com.hangwei.paperless.model.bean.UserInfo;
import com.twelve.all.net.ResponseInfo;

import java.util.ArrayList;
import java.util.List;

import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Author: zlc
 * Date: 2017/5/12.
 * 网络请求接口
 */
public interface ResponseInfoAPI {

    @POST("open/pad/sys/getVersion")
    Observable<ResponseInfo<ServerVersion>> getServerVersion(@Query("name") String android);

    @POST("open/pad/sys/doLoginPad")
    Observable<ResponseInfo<Login>> doLoginPad(@Query("username") String userName, @Query("password") String password, @Query("appname") String appname);

    //平板登录--刷卡方式
    @POST("open/pad/sys/doLoginPadByCard")
    Observable<ResponseInfo<Login>> doLoginPadByCard(@Query("cardId") String msg, @Query("appname") String appname);

    @POST("open/api/token/get")
    Observable<ResponseInfo<TokenInfo>> getToken(@Query("appid") String appid, @Query("timestamp") long timestamp, @Query("nonce") String nonce, @Query("sign") String sign);

    @POST("open/pad/sys/getUserInfo")
    Observable<ResponseInfo<UserInfo>> getUserInfo(@Query("userId") String userId, @Query("clientId") String clientid, @Query("appname") String appname);

    //获取工卡类型
    @POST("open/pad/base/getSheetTypeList")
    Observable<ResponseInfo<List<SheetType>>> getSheetTypeList(@Query("userId") String userId);

    //首页
    @POST("open/pad/ersex/routingSheet/getAllTaskList")
    Observable<ResponseInfo<List<Sheet>>> getAllTaskList(@Query("userId") String userId, @Query("sheetTypeId") String sheetTypeId, @Query("isForInspection") String isForInspection);

    //基本信息
    @POST("open/pad/ersex/routingSheet/getRoutingSheetInfo")
    Observable<ResponseInfo<BasicInfoBean>> getRoutingSheetInfo(@Query("userId") String userId, @Query("billId") String billId);

    //子修理工艺流程单
    @POST("open/pad/ersex/generalRoutingSheet/getRoutingSheetList")
    Observable<ResponseInfo<SubProcessInfo>> getRoutingSheetList(@Query("userId") String userId, @Query("billId") String billId);

    //接收检查记录单信息
    @POST("open/pad/ersex/generalRoutingSheet/getReceiveRecordSheet")
    Observable<ResponseInfo<AcceptCheckInfo>> getReceiveRecordSheet(@Query("userId") String userId, @Query("billId") String billId);

    //获取记录单列表数据信息(包括2分解记录单、3清洗记录单、4检查记录单、6装配记录单、7测试记录单、8最终检查记录单页签)
    @POST("open/pad/ersex/generalRoutingSheet/getRoutingSheetStep")
    Observable<ResponseInfo<MainRepairList>> getRoutingSheetStep(@Query("userId") String userId, @Query("billId") String billId,
                                                                 @Query("billSeq") int billSeq, @Query("scope") int scope,
                                                                 @Query("pagenumber") int pagenumber, @Query("pagesize") int pagesize);

    //提交盖章(模块页签) 主要用于1、5、8模块最后的盖章
    @POST("open/pad/ersex/generalRoutingSheet/stampRoutingSheetContent")
    Observable<ResponseInfo<Object>> stampRoutingSheetContent(@Query("userId") String userId, @Query("billId") String billId,
                                                              @Query("billSeq") int billSeq, @Query("stampRole") String stampRole,
                                                              @Query("stampUserId") String stampUserId, @Query("stampId") String stampId,
                                                              @Query("remark") String remark);

    //首页搜索
    @POST("open/pad/ersex/routingSheet/getRoutingSheetByKeyword")
    Observable<ResponseInfo<List<Sheet>>> getRoutingSheetByKeyword(@Query("userId") String userId, @Query("sheetTypeId") String sheetTypeId, @Query("keyword") String keywords);

    //接受检查界面保持
    @POST("open/pad/ersex/generalRoutingSheet/saveReceiveRecordSheet")
    Observable<ResponseInfo<List<AcceptCheckInfo.TBean>>> saveReceiveRecordSheet(@Body RequestBody requestBody);

    //接受检查删除行
    @POST("open/pad/ersex/generalRoutingSheet/removeReceiveRecordSheetRow")
    Observable<ResponseInfo<Object>> removeReceiveRecordSheetRow(@Query("userId") String userId, @Query("rowId") String id);

    //234678盖章
    @POST("open/pad/ersex/routingSheetStep/stampRoutingSheetStep")
    Observable<ResponseInfo<Object>>
    stampRoutingSheetStep(@Query("userId") String userId, @Query("billId") String billId,
                          @Query("stepId") String stepId, @Query("stampRole") int stampRole,
                          @Query("stampUserId") String stampUserId, @Query("stampId") String stampId,
                          @Query("resultVal") String resultVal);

    //获取DRS
    @POST("open/pad/ersex/routingSheetStep/getDrsAndAttachmentList")
    Observable<ResponseInfo<DRSInfo>>
    getDrsAndAttachmentList(@Query("userId") String userId, @Query("stepId") String stepId, @Query("scope") int scope);

    //保存DRS
    @POST("open/pad/ersex/routingSheetStep/saveStepDrs")
    Observable<ResponseInfo<Object>> saveStepDrs(@Body RequestBody requestBody);

    //保存子修理工艺页签保存pn
    @POST("open/pad/ersex/generalRoutingSheet/saveRoutingSheetListInfo")
    Observable<ResponseInfo<Object>>
    saveRoutingSheetListInfo(@Query("userId") String userId, @Query("billId") String billId,
                             @Query("id") String id, @Query("pn") String pn);

    //获取字典数据
    @POST("open/pad/base/getDictByIdOrCode")
    Observable<ResponseInfo<List<DictBean>>>
    getDictByIdOrCode(@Query("userId") String userId, @Query("id") String id, @Query("code") String naType,
                      @Query("pagenumber") int pagenumber, @Query("pagesize") int pagesize);

    //主修理当前界面页签
    @POST("open/pad/ersex/routingSheetStep/getExRoutingSheetSteps")
    Observable<ResponseInfo<List<RecordListBean>>>
    getExRoutingSheetSteps(@Query("userId") String userId, @Query("billId") String billId);

    //接受检查记录获取结果选项
    @POST("open/pad/base/getResultDetailList")
    Observable<ResponseInfo<List<ResultBean>>>
    getResultDetailList(@Query("userId") String userId, @Query("resultId") String resultId);

    //向前或向后分页获取工步数据
    @POST("open/pad/ersex/routingSheetStep/getExRoutingSheetStepByPage")
    Observable<ResponseInfo<List<RecordListBean>>>
    getExRoutingSheetStepByPage(@Query("userId") String userId, @Query("billId") String billId,
                                @Query("direction") String up, @Query("stepId") String stepId,
                                @Query("pagesize") int pagesize);

    //NA处理及盖章
    @POST("open/pad/ersex/routingSheetStep/stampNAInfo")
    Observable<ResponseInfo<Object>>
    stampNAInfo(@Query("userId") String userId, @Query("billId") String billId,
                @Query("stepIds") String stepIds, @Query("stampUserId") String stampUserId,
                @Query("stampId") String stampId, @Query("naTypeId") String naTypeId);

    //获取批量零件记录单相关信息
    @POST("open/pad/ersex/subRoutingSheet/getLotDataSheets")
    Observable<ResponseInfo<LotDataSheet>>
    getLotDataSheets(@Query("userId") String userId, @Query("billId") String billId);

    //保存批量零件记录表
    @POST("open/pad/ersex/subRoutingSheet/saveLotDataSheet")
    Observable<ResponseInfo<Object>> saveLotDataSheet(@Body RequestBody requestBody);

    //批量零件表页签工步--盖章
    @POST("open/pad/ersex/subRoutingSheet/stampLotDataSheetStep")
    Observable<ResponseInfo<Object>>
    stampLotDataSheetStep(@Query("userId") String userId, @Query("billId") String billId,
                          @Query("stepId") String stepId, @Query("totalQuantity") String totalQuantity,
                          @Query("stampUserId") String stampUserId, @Query("stampId") String stampId);

    //获取子修理数据填报单列表数据
    @POST("open/pad/ersex/subRoutingSheet/getRoutingSheetSubBills")
    Observable<ResponseInfo<List<DataFilling>>>
    getRoutingSheetSubBills(@Query("userId") String userId, @Query("billId") String billId);

    //NA子修理数据填报单
    @POST("open/pad/ersex/subRoutingSheet/stampNASubBills")
    Observable<ResponseInfo<Object>>
    stampNASubBills(@Query("userId") String userId, @Query("billId") String billId,
                    @Query("subBillId") String id, @Query("stampUserId") String userId1,
                    @Query("stampId") String stampId, @Query("naTypeId") String naTypeId);

    //零件检查状态记录单
    @POST("open/pad/ersex/subRoutingSheet/getInspectionRecordSheet")
    Observable<ResponseInfo<List<PartCheckInfo>>>
    getInspectionRecordSheet(@Query("userId") String userId, @Query("billId") String billId, @Query("subBillId") String subId);

    //零件检查状态记录单--签章
    @POST("open/pad/ersex/subRoutingSheet/stampInspectionRecordSheet")
    Observable<ResponseInfo<SubPartCheckSealBean>>
    stampInspectionRecordSheet(@Query("userId") String userId, @Query("rowId") String id,
                               @Query("stampRole") int stampRole, @Query("actual") String actual,
                               @Query("dispositionId") String dispositionId, @Query("dimAfterRework") String dimAfterRework,
                               @Query("dimAfterGrind") String dimAfterGrind, @Query("stampUserId") String userId1,
                               @Query("stampId") String stampId);

    //获取零件记录单处理方案
    @POST("open/pad/base/getDispositionList")
    Observable<ResponseInfo<List<Disposition>>>
    getDispositionList(@Query("userId") String string);

    //获取衬套装配单
    @POST("open/pad/ersex/subRoutingSheet/getBushInstallationSheet")
    Observable<ResponseInfo<List<SubSetInfo>>>
    getBushInstallationSheet(@Query("userId") String userId, @Query("billId") String billId, @Query("subBillId") String subId);

    //衬套装配单--盖章
    @POST("open/pad/ersex/subRoutingSheet/stampBushInstallationSheet")
    Observable<ResponseInfo<SubSetListSealBean>>
    stampBushInstallationSheet(@Query("userId") String userId, @Query("rowId") String id,
                               @Query("inlActual") String actual, @Query("outerActual") String outActual,
                               @Query("innerActual") String innerActual,
                               @Query("stampUserId") String userId1, @Query("stampId") String stampId);

    //获取衬套加工单所有信息
    @POST("open/pad/ersex/bushingSheet/getBushingSheets")
    Observable<ResponseInfo<SubProcessListAll>>
    getBushingSheets(@Query("userId") String userId, @Query("billId") String billId,
                     @Query("subBillId") String subId, @Query("bushingSheetId") String o);

    //衬套加工单(衬套序号)—盖章
    @POST("open/pad/ersex/bushingSheet/stampBushingSheetDRS")
    Observable<ResponseInfo<Object>>
    stampBushingSheetDRS(@Body RequestBody requestBody);

    //衬套加工单(工步)--盖章
    @POST("open/pad/ersex/bushingSheet/stampBushingSheetStep")
    Observable<ResponseInfo<Object>>
    stampBushingSheetStep(@Query("userId") String userId, @Query("rowId") String id,
                          @Query("stampUserId") String userId1, @Query("stampId") String stampId);

    //衬套加工单--保存衬套序号字段
    @POST("open/pad/ersex/bushingSheet/saveBushingSN")
    Observable<ResponseInfo<Object>>
    saveBushingSN(@Query("userId") String userId, @Query("subBillId") String subBillId,
                  @Query("billSeq") Integer billSeq, @Query("bushingSN") String bushingSN);

    //获取所有件号信息
    @POST("open/pad/base/getPartnoList")
    Observable<ResponseInfo<List<PNBean>>>
    getPartnoList(@Query("userId") String userId, @Query("number") String pn,
                  @Query("isFuzzyMatch") boolean isFuzzyMatch, @Query("pagesize") int pageSize,
                  @Query("pagenumber") int page);

    //保存修理工艺单基础信息
    @POST("open/pad/ersex/routingSheet/saveRoutingSheet")
    Observable<ResponseInfo<Object>>
    saveRoutingSheet(@Query("userId") String userId, @Query("billId") String billId,
                     @Query("pnNHA") String partnoId, @Query("partnoId") String partnoId1,
                     @Query("sn") String sn, @Query("actualMH") String actualHour);


    //获取工程处理单信息
    @POST("open/pad/ersex/engineerDisposition/getEngineerDispositionData")
    Observable<ResponseInfo<List<EngTreatmentInfo>>>
    getEngineerDispositionData(@Query("userId") String userId, @Query("woNO") String woNO);

    //扫码打开工卡
    @POST("open/pad/ersex/routingSheet/getRoutingSheetByQRCode")
    Observable<ResponseInfo<QRBean>>
    getRoutingSheetByQRCode(@Query("userId") String userId, @Query("qrcode") String result);

    //新增工程处理单
    @POST("open/pad/ersex/engineerDisposition/addEngineerDisposition")
    Observable<ResponseInfo<Object>>
    addEngineerDisposition(@Body RequestBody requestBody);

    //工步执行时刷卡获取印章信息(工卡通用)
    @POST("open/pad/ersex/routingSheetStep/getUserByCardId")
    Observable<ResponseInfo<CardToSeal>>
    getUserByCardId(@Query("userId") String userId, @Query("billId") String billId,
                    @Query("stepId") String stepId, @Query("cardId") String msg);

    //上传图片
    @FormUrlEncoded
    @POST("open/pad/sys/uploadFile")
    Observable<ResponseInfo<ResponseInfo<PicResult>>>
    uploadFile(@Field("userId") String userId, @Field("module") String mStepId,
               @Field("objectId") String objectId, @Field("filename") String url, @Field("base64") String base64);

    //零件检查状态记录单--删除复制行
    @POST("open/pad/ersex/subRoutingSheet/removeICRSheet")
    Observable<ResponseInfo<Object>> removeICRSheet(@Query("userId") String userId, @Query("rowId") String id);

    //零件检查状态记录单--复制行
    @POST("open/pad/ersex/subRoutingSheet/copyICRSheet")
    Observable<ResponseInfo<Object>> copyICRSheet(@Query("userId") String userId, @Query("rowId") String id);

    //零件检查状态记录单--保存方案
    @POST("open/pad/ersex/subRoutingSheet/saveICRDisposition")
    Observable<ResponseInfo<Object>>
    saveICRDisposition(@Query("userId") String userId, @Query("rowId") String id,
                       @Query("actual") String trim, @Query("disposition") String toString);

    //NA子修理中ICR表单行
    @POST("open/pad/ersex/subRoutingSheet/stampNAICRSheet")
    Observable<ResponseInfo<Object>>
    stampNAICRSheet(@Query("userId") String userId, @Query("rowId") String id,
                    @Query("stampUserId") String userId1, @Query("stampId") String stampId,
                    @Query("naTypeId") String naTypeId);

    //衬套加工单--转交工艺
    @POST("open/pad/ersex/bushingSheet/transferTechnician")
    Observable<ResponseInfo<Object>> transferTechnician(@Query("userId") String userId, @Query("bushingSheetId") String stepId);

    //保存修理工艺单的维修区域信息
    @POST("open/pad/ersex/routingSheet/saveRoutingSheetArea")
    Observable<ResponseInfo<Object>>
    saveRoutingSheetArea(@Query("userId") String userId, @Query("billId") String billId, @Query("repairArea") String trim);

    //NEW首页--获取工卡任务数据
    @POST("open/pad/ersex/routingSheet/getRoutingSheetList")
    Observable<ResponseInfo<List<Sheet>>>
    getRoutingSheetList0(@Query("userId") String userId, @Query("woNo") String woNo,
                         @Query("pageOrderName") String pageOrderName, @Query("pageOrderBy") String pageOrderBy,
                         @Query("pagenumber") int page, @Query("pagesize") int pageSize);

    //获取填报的衬套加工单---列表
    @POST("open/pad/ersex/bushingSheet/getBushingSheetList")
    Observable<ResponseInfo<List<ProcessSheet>>>
    getBushingSheetList(@Query("userId") String userId, @Query("woNo") String woNo,
                        @Query("pagenumber") int page, @Query("pagesize") int pageSize,
                        @Query("pageOrderName") String pageOrderName, @Query("pageOrderBy") String pageOrderBy);

    //获取主修理工艺单子修理工艺单目录
    @POST("open/pad/ersex/generalRoutingSheet/getRoutingSheetList")
    Observable<ResponseInfo<SubRepairList>>
    getRoutingSheetList1(@Query("userId")String userId,@Query("billId") String billId,
                         @Query("pagenumber") int nextRequestPage,@Query("pagesize") int pageSize);

    //获取主修理工艺单子修理工艺单目录
    @POST("open/pad/ersex/generalRoutingSheet/effective")
    Observable<ResponseInfo<Object>>
    effective(@Query("userId")String userId, @Query("billId")String billId, @Query("ids")ArrayList<String> list);

    //获取零件加工工艺流程单所有信息
    @POST("open/pad/ersex/bushingSheet/getPartsRoutingSheets")
    Observable<ResponseInfo<PartsRoutingSheet>>
    getPartsRoutingSheets(@Query("userId")String userId, @Query("billId")String billId,@Query("bushingSheetId")String bushingSheetId);
}



